Amazon FSx for Windows File Server の Volume Shadow Copy 管理機能を試してみた
しばたです。
現在のAmazon FSx for Windows File Server(以後FSx for Windows)はVolume Shadow Copy Service(VSS)に対応しておりShadow Copyを利用することが可能です。
(上記は機能提供時の弊社ブログです)
本記事ではこのVSS管理の各機能をもう少し深掘りして理解するために実際に試してみました。
やってみた
それでは早速試していきます。
環境としては以前公開した記事と同じ環境を使っています。
本記事ではFSx for Windows環境の構築手順については割愛します。
なんらかのFSx for Windowsのファイルシステムが存在し、リモート管理用Windows Serverが準備できているところがスタート地点です。
0. リモート管理コンソールへの接続
現時点でFSx for WindowsのVSS設定はマネジメントコンソールからは行えず、PowerShell Remotingを使ってCLIから行う必要があります。
こちらは前に重複排除を試した時と同様に所定のパラメーターを設定しEnter-PSSessionを実行することでFSx for Windowsのリモートコンソールにログインできます。
# PowerShell RemotingでFSxに接続
$cred = Get-Credential '<FSx管理者ユーザー名>'
$params = @{
ComputerName = '<FSx for WindowsのPowerShellエンドポイント>'
Credential = $cred
ConfigurationName = 'FSxRemoteAdmin'
SessionOption = (New-PSSessionOption -UICulture 'en-US')
}
Enter-PSSession @params
1. VSSの有効化
FSx for WindowsでVSSを有効にするにはSet-FsxShadowStorage
とSet-FsxShadowCopySchedule
コマンドを使います。
はじめにSet-FsxShadowStorage -Default
でストレージ容量のうちVSSで使用する割合(デフォルト 10%)を設定します。
Set-FsxShadowCopySchedule -Default
でVSSを取得するスケジュール(デフォルト 平日7:00 UTCと12:00 UTC)を追加します。
# デフォルト設定でVSSを有効にする (ストレージサイズの最大10%をVSSで使用)
PS > Set-FsxShadowStorage -Default
# デフォルトスケジュールの追加
PS > Set-FSxShadowCopySchedule -Default -Confirm:$false
Set-FsxShadowStorage
はデフォルト値以外に-MaxSize
パラメーターを指定することでVSSが使う最大容量の割り当てを変更することができます。
# VSSの最大割り当て容量を変更 : 数値指定、パーセント指定のいずれかが可能
PS > Set-FsxShadowStorage -MaxSize "20%"
2. Shadow Copyスケジュールの取得と更新
VSSを取得するスケジュールはGet-FSxShadowCopySchedule
で確認できます。
# 現在のShadow Copyスケジュールを取得する
PS > Get-FSxShadowCopySchedule
スケジュールを更新したい場合はSet-FSxShadowCopySchedule
を使います。
このコマンドの使い方としては、通常のWindowsタスクスケジュールを作るためのNew-ScheduledTaskTriggerコマンドレットを使いTriggerオブジェクトを準備し-Scheduledtasktriggers
パラメーターに引き渡してやれば良いのですが、機能制限されているリモートコンソール上ではNew-ScheduledTaskTriggerを呼び出せません。
このためローカルコンソール上でTriggerオブジェクトを用意しInvoke-Command
を使ってやる必要があります。
# Shadow Copyスケジュールを更新するにはローカルコンソールからコマンドを実行する
# * 新しいスケジュールとなる Trigger オブジェクトを生成
$trigger1 = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -at 06:00
$trigger2 = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -at 18:00
# * Set-FSxShadowCopySchedule をリモート実行してスケジュールを更新
$cred = Get-Credential '<FSx管理者ユーザー名>'
$params = @{
ComputerName = '<FSx for WindowsのPowerShellエンドポイント>'
Credential = $cred
ScriptBlock = {
# ここにリモートで実行するコマンドを記述。ローカルから変数を引き渡すため using スコープにする
Set-FSxShadowCopySchedule -Scheduledtasktriggers $using:trigger1, $using:trigger2 -Confirm:$false
}
ConfigurationName = 'FSxRemoteAdmin'
SessionOption = (New-PSSessionOption -UICulture 'en-US')
}
Invoke-Command @params
ちなみにスケジュールは一括更新(総入れ替え)となりますのでご注意ください。
スケジュールを削除したい場合はRemove-FSxShadowCopySchedule
を使います。
このコマンドには個別のスケジュールを指定する引数は無く、すべてのスケジュールを一括削除します。
# Shadow Copyスケジュールを削除する
PS > Remove-FSxShadowCopySchedule -Confirm:$false
もし誤ってスケジュールを削除してしまった場合は前項のSet-FsxShadowCopySchedule -Default
を実行して復旧すると良いでしょう。
3. Shadow Copyの一覧を取得
取得したShadow Copyの一覧を取得するにはGet-FSxShadowCopies
を使います。
PS > Get-FSxShadowCopies
これはエクスプローラーから参照できる「以前のバージョン」と同じ情報となります。
4. 手動でShadow Copyを実行する
オンデマンドでShadow Copyを取得する場合はNew-FSxShadowCopy
コマンドを使います。
PS > New-FSxShadowCopy
直近のShadow Copyを確認するとちゃんと取得できています。
# リモートコンソールだとデータのフィルターが面倒だったのでローカルから直近3件を取得
$params = @{
ComputerName = '<FSx for WindowsのPowerShellエンドポイント>'
Credential = $cred
ScriptBlock = {
Get-FSxShadowCopies
}
ConfigurationName = 'FSxRemoteAdmin'
SessionOption = (New-PSSessionOption -UICulture 'en-US')
}
Invoke-Command @params | Sort-Object -Descending 'Creation Time' |
Select-Object -Property 'Shadow Copy ID', 'Creation Time' -First 3
5. Shadow Copyを削除する
古いShadow Copyを削除したい場合はRemove-FSxShadowCopies
コマンドを使います。
このコマンドでは以下の3パターンの引数指定が存在します。
# -Oldest パラメーターを指定すると最も古いShadow Copyを削除します。
PS > Remove-FSxShadowCopies -Oldest -Confirm:$false
# -ShadowCopyID パラメーターを使うと個別にShadow Copyを削除します。
PS > Remove-FSxShadowCopies -ShadowCopyID '{ABCDEF12-3456-7890-ABCD-EF1234567890}' -Confirm:$false
# -All パラメーターを指定するとすべてのShadow Copyを削除します。
PS > Remove-FSxShadowCopies -All
5. Shadow Copyのボリューム利用率を取得する
Get-FSxShadowStorage
コマンドを使うとVSSがボリューム内でどの程度の容量を使用しているか取得できます。
PS > Get-FSxShadowStorage
取得しているプロパティ名から推測するに、おそらくWin32_ShadowStorageの値を返していると思われます。
これらはそれぞれ、
AllocatedSpace
: 現在VSSで割り当て済みの容量(Byte)UsedSpace
: 現在VSSで使用中の容量(Byte)MaxSpace
:Set-FsxShadowStorage
で指定した割り当て可能な最大容量(Byte)
とされています。
正直なところAllocated
とUsed
の違いがあまり良くわかっていないのですが、VSSのボリューム利用率が最大値を迎えても古いShadow Copyが順次消えていくだけなのであまり気にしなくもよいでしょう。
6. VSSの利用を止める
最後にRemove-FSxShadowStorage
コマンドを使うと、既存のShadow Copy、Shadow Copyスケジュールをすべて削除し、ストレージの割り当ても解除します。
PS > Remove-FSxShadowStorage
終わりに
以上となります。
Shadow Copyスケジュールの更新や削除の方法がちょっと特殊ですが、それ以外の操作については割と直感的と感じました。
機能的にはこれくらいならWindows Server側で処理するのではなくAWS側でAPIを用意してくれると非常に嬉しいのですが、AWSとして将来的なサポートを考えると難しいところもあるのかなと思います。
VSSの設定自体はさほど頻繁に行うものでもないのでこのままでも問題は無いでしょう。
本記事がFSx for Windowsの管理をする方の役に立てば幸いです。